export interface InsureCompanyRuleDto {
    /**
     * 创建时间
     */
    createTime: Date;
    /**
     * 创建人
     */
    createUserName: string;
    /**
     * 主键Id
     */
    id: number;
    /**
     * 保险产品（1:日结保  2:长期保  3:团意险保）
     */
    insureType: number;
    /**
     * 关联方案
     */
    planNameList: string[];
    /**
     * 方案规则名称
     */
    ruleName: string;
}


export interface AddInsureCompanyRuleReqDto {
    ageRule?: RAgeRuleReq;
    airdropRule?: RAirdropRuleReq;
    /**
     * 客户区域限制规则（-1:不限制  1:允许投保区域  2:禁止投保区域）
     */
    companyAreaRule?: number;
    /**
     * 客户区域限制规则（具体区域值，如天津,北京市平谷区）
     */
    companyAreaRuleContent?: string[];
    /**
     * 出险规则（-1:不限制  1:次月  2:理赔结束）
     */
    dangerRule?: number;
    deductRule?: RDeductRuleReq;

    effectRule?: REffectRuleReq[];
    /**
     * 保险产品（1:日结保  2:长期保  3:团意险保）
     */
    insureType?: number;
    /**
     * 查重规则（-1:不查重  1:保司查重  2:不同保司查重  3:保司方案查重）
     */
    repeatRule?: string;
    replaceRule?: RReplaceRuleReq;
    /**
     * 保司规则名称
     */
    ruleName?: string;
    /**
     * 派遣单位区域限制规则（-1:不限制  1:允许投保区域  2:禁止投保区域）
     */
    serveCompanyAreaRule?: number;
    /**
     * 派遣单位区域限制规则（具体区域值，如天津,北京市平谷区）
     */
    serveCompanyAreaRuleContent?: string[];
}

export interface EditInsureCompanyRuleReqDto extends AddInsureCompanyRuleReqDto {
  id: number
}

/**
* RAgeRuleReq，年龄规则
*/
export interface RAgeRuleReq {
    /**
     * 年龄规则（结束年龄，不限制年龄时传-1）
     */
    endAge?: number;
    /**
     * 年龄规则（开始年龄，不限制年龄时传-1）
     */
    startAge?: number;
}

/**
* RAirdropRuleReq，空投规则
*/
export interface RAirdropRuleReq {
    /**
     * 扣费优先级选择（3,5，表示P0优先级为按3类扣，P1优先级为按5类扣，依次类推）
     */
    deductPriority?: number[];
    /**
     * 是否开启空投（0为关闭，1为开启）
     */
    openStatus?: number;
    /**
     * 适用范围（1为系统）
     */
    scope?: string;
}

/**
* RDeductRuleReq，扣费规则
*/
export interface RDeductRuleReq {
    deductTypeConfig?: DeductTypeConfig;
    /**
     * 保单类型释义（flexible灵活保单、month月单）
     */
    insureType?: string;
    /**
     * 保单类型（1为灵活保单、2为月单）
     */
    insureTypeVal?: number;
}

/**
* DeductTypeConfig
*/
export interface DeductTypeConfig {
    /**
     * 自然月，扣除月保费比例（比如扣0.5倍的月保费）
     */
    deductRatio: number;
    /**
     * 自然月，几号之后生效
     */
    moreThanDate: number;
}

/**
* REffectRuleReq，生效规则
*/
export interface REffectRuleReq {
    /**
     * 每日允许操作加减保时间
     */
    allowOperateTime: string;
    /**
     * 生效方式释义（nextDayEffect次日生效、realTimeEffect即时生效）
     */
    effectType: string;
    /**
     * 生效方式（1为次日生效、2为即时生效）
     */
    effectTypeVal: number;
    /**
     * 第一次激活保单，0表示当天即可生效(T+0)，1表示次日生效(T+1)
     */
    firstEnsure: number;
    /**
     * 即时生效，每个整点多少分前可投保
     */
    minute: number;
    personNumConfig: PersonNumConfig;
}

/**
* PersonNumConfig
*/
export interface PersonNumConfig {
    /**
     * 在保人数
     */
    alreadyEnsureNum?: number;
    /**
     * 起投人数
     */
    firstEnsureNum?: number;
    /**
     * 人数限制规则释义（common普通规则）
     */
    personNumType?: string;
    /**
     * 人数限制规则（1为普通规则）
     */
    personNumTypeVal?: number;
}

/**
* RReplaceRuleReq，替换规则
*/
export interface RReplaceRuleReq {
    monthInsure?: MonthInsure;
}

/**
* MonthInsure
*/
export interface MonthInsure {
    /**
     * 是否允许替换人员（0为不允许替换人员，1为允许替换人员）
     */
    allowReplace: number;
    /**
     * 替换匹配方式（0为风险等级相同，1为保费相同，2为风险等级或保费相同）
     */
    replaceMethod: number;
}


export interface InsureCompanyRuleDetailDto {
  id: number;
  ruleName: string;
  insureType: number;
  ageRule: AgeRule;
  dangerRule: number;
  companyAreaRule: number;
  companyAreaRuleContent: string[];
  serveCompanyAreaRule: number;
  serveCompanyAreaRuleContent: string[];
  effectRule: EffectRule[];
  deductRule: DeductRule;
  replaceRule: ReplaceRule;
  repeatRule: number[];
}
export interface ReplaceRule {
  monthInsure: MonthInsure;
}

export interface DeductRule {
  insureTypeVal: number;
  insureType: string;
  deductTypeConfig: DeductTypeConfig;
}
export interface EffectRule {
  effectTypeVal: number;
  effectType: null;
  allowOperateTime: string;
  minute: null;
  firstEnsure: null;
  personNumConfig: PersonNumConfig;
}
export interface AgeRule {
  startAge: number;
  endAge: number;
}